<?php

//header("Content-type: text/html; charset=utf-8");
//require_once '../Application/Lib/simple_html_dom.php';
//
//
//$cookie_jar = 'Hm_lvt_f0b17751385cbe9cea2ad4d45e3176cd=1535608089,1535683795,1535966542,1536027871; menu1=6; PHPSESSID=cjl74puse43gntb56l3iunvju0; menu2=123; Hm_lpvt_f0b17751385cbe9cea2ad4d45e3176cd=1536064187';
//
//
//$ch = curl_init();


//curl_setopt($ch, CURLOPT_HEADER, 0);
//curl_setopt($ch, CURLOPT_HTTPGET, 1);
//curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //不验证证书

//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //不验证证书
//curl_setopt($ch,CURLOPT_COOKIESESSION,true);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
//curl_setopt($ch, CURLOPT_COOKIE, $cookie_jar);

//curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
//
//$simple_html_dom = new \simple_html_dom();
//$arr=[];
////for($i=1;$i<15;$i++){
//    $url = 'https://mp.weixin.qq.com';
//    curl_setopt($ch, CURLOPT_URL, $url);
//    $output = curl_exec($ch);
//    var_dump($output);
//
//    $simple_html_dom->load($output);
//
//
//    foreach ($simple_html_dom->find('tbody tr') as $tr_dom){
//        $dom = $tr_dom->find('td',3);
//        $text = $dom?trim($dom->plaintext):0;
//        $arr[]=$text;
//    }
////}
//curl_close($ch);
//
//var_dump($arr);
//echo '<br/>';
//echo array_sum($arr);



class WeiSendAuto
{

    private $_apis = [
        "host"          => "https://mp.weixin.qq.com",
        "login"         => "https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin",
        "qrcode"        => "https://mp.weixin.qq.com/cgi-bin/loginqrcode?action=getqrcode&param=4300&rd=398",
        "loginqrcode"   => "https://mp.weixin.qq.com/cgi-bin/loginqrcode?action=ask&token=&lang=zh_CN&f=json&ajax=1",
        "loginask"      => "https://mp.weixin.qq.com/cgi-bin/loginqrcode?action=ask&token=&lang=zh_CN&f=json&ajax=1&random=",
        "loginauth"     => "https://mp.weixin.qq.com/cgi-bin/loginauth?action=ask&token=&lang=zh_CN&f=json&ajax=1",
        "bizlogin"      => "https://mp.weixin.qq.com/cgi-bin/bizlogin?action=login&lang=zh_CN",
        "searchbiz"      => "https://mp.weixin.qq.com/cgi-bin/searchbiz?action=search_biz&lang=zh_CN&f=json&ajax=1&"
    ];

    private $_redirect_url  = "";

    private $_key           = "";

    private function _getCookieFile(){
        return  './'."cookie_{$this->_key}.text";
    }
    private function _getSavePath(){
        return  './'.'qrcode_'.$this->_key.'.png';
    }

    private function _log($msg){
        var_dump( "[".date("Y-m-d H:i:s",time())."] ========:".$msg);
    }

    public function getToken(){
       return file_get_contents("token_{$this->_key}.txt");
    }

    public function setToken($token){
        file_put_contents("token_{$this->_key}.txt",$token);
    }


    public function init($options){
        if(!isset($options["key"])){
            die("Key is Null!");
        }
        $this->_key     =   $options["key"];
        if($this->getToken()){
            echo("HAS Token !");
            return;
        }else{

            $this->fetch("https://mp.weixin.qq.com/","","text");

            echo "start login!!";
            $this->start_login($options);
        }
    }




    private function start_login($options){
        $_res        = $this->_login($options["account"],$options["password"]);
//        var_dump($_res);exit();
//        if(!$_res["status"]){
//            echo $_res["info"];
//
//            return;
//        }
        //保存二维码
        $this->_saveQRcode();
        $_ask_api        =   $this->_apis["loginask"];
        $_input["refer"] =   $this->_redirect_url;
        $_index          =   1;


        while(true){
            /* if($_index>60){
                            break;
                        }*/
            $_res        =   $this->fetch($_ask_api.$this->getWxRandomNum(),$_input);
            $_status     =   $_res["status"];
            if($_status==1){
                if($_res["user_category"]==1){
                    $_ask_api = $this->_apis["loginauth"];
                }else{
                    $this->_log("Login success");
                    break;
                }
            }else if($_status==4){
                $this->_log("已经扫码");
            }else if($_status==2){
                $this->_log("管理员拒绝");
                break;
            }else if($_status==3){
                $this->_log("登录超时");
                break;
            }else{
                if($_ask_api==$this->_apis["loginask"]){
                    $this->_log("请打开test.jpg，用微信扫码");
                }else{
                    $this->_log("等待确认");
                }
            }
            sleep(2);
            $_index++;
        }

        /*if($_index>=60){
            $this->_log("U亲，超时了");
            return;
        }*/


        $this->_log("开始验证");
        $_input["post"]      = ["lang"=>"zh_CN","f"=>"json","ajax"=>1,"random"=>$this->getWxRandomNum(),"token"=>""];
        $_input["refer"]     = $this->_apis["host"];
        $_res                = $this->fetch($this->_apis["bizlogin"],$_input);
        $this->_log(print_r($_res,true));

        if($_res["base_resp"]["ret"]!=0){
            $this->_log("error = ".$_res["base_resp"]["err_msg"]);
            return ;
        }

        $redirect_url        =    $_res["redirect_url"];//跳转路径
        if(preg_match('/token=([\d]+)/i', $redirect_url,$match)){//获取cookie
            $this->setToken($match[1]);
        }
        $this->_log("验证成功,token: ".$this->getToken());
    }


    public function get_article_list(){
        $param=[
            'token'=>$this->getToken(),
            'random'=>$this->getWxRandomNum(),
            'query'=>'科技美学',
            'begin'=>20,
            'count'=>5
        ];
        $paramurl = http_build_query($param , '' , '&');
        $httpurl = $this->_apis["searchbiz"].$paramurl ;

        $_input['refer']='https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&token=949583584&lang=zh_CN';
        $res = $this->fetch($httpurl,$_input,"json");
        return $res;
    }


    //下载二维码
    private function _saveQRcode(){
        $_input["refer"] = $this->_redirect_url;
        $_res       = $this->fetch($this->_apis["qrcode"],$_input,"text");
        $fp         = fopen($this->_getSavePath(), "wb+") or die("open fails");
        fwrite($fp,$_res) or die("fwrite fails");
        fclose($fp);
    }





    private function _login($_username,$_password)
    {
        $_input["post"] = array(
            'username' => $_username,
            'pwd' => md5($_password),
            'f' => 'json',
            'imgcode' => '',
            'ajax' => 1,
            'lang' => 'zh_CN',
            'userlang' => 'zh_CN',
            'token' => '',
        );
        $_input["refer"] = "https://mp.weixin.qq.com";
        $_res = $this->fetch($this->_apis["login"], $_input);

        if ($_res["base_resp"]["ret"] !== 0) {
            $this->_redirect_url = "https://mp.weixin.qq.com" . $_res["redirect_url"];//跳转路径
            return $_res;
        }else{
            return $_res;
        }
    }



    private function getWxRandomNum(){
            return "0.".mt_rand(100000000, 999999999);
    }


    private function fetch($url, $_input = null, $data_type = 'json')
        {
            $ch = curl_init();
            $useragent = isset($_input['useragent']) ? $_input['useragent'] : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2';

            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_AUTOREFERER, true);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($ch, CURLOPT_POST, isset($_input['post']));

            if (isset($_input['post'])) {
                curl_setopt($ch, CURLOPT_POSTFIELDS, $_input['post']);
            }

            if (isset($_input['refer'])) {
                curl_setopt($ch, CURLOPT_REFERER, $_input['refer']);
            }
            curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, (isset($_input['timeout']) ? $_input['timeout'] : 5));
            curl_setopt($ch, CURLOPT_COOKIEJAR, (isset($_input['cookiefile']) ? $_input['cookiefile'] : $this->_getCookieFile()));
            curl_setopt($ch, CURLOPT_COOKIEFILE, (isset($_input['cookiefile']) ? $_input['cookiefile'] : $this->_getCookieFile()));
            $result = curl_exec($ch);
            curl_close($ch);

            if ($data_type == 'json') {
                $result = json_decode($result, true);
            }
            return $result;
        }
}





        $arr = array(
            'account' => '377837240@qq.com',
            'password' => 'ld19941029',
            'key' => "tmall",
        );
        $w = new WeiSendAuto();
        $w->init($arr);
        if (!$w->getToken()) {
            die("NOT TOKEN!");
        } else {

            var_dump($w->get_article_list());
        }




